gtkswitch: Don't be eager in accepting the gesture
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 26 Jun 2020 15:35:05 +0000 (17:35 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Fri, 26 Jun 2020 15:48:10 +0000 (17:48 +0200)
The gesture should be accepted whenever it triggers uncancellable
actions in the widget. This means it should be accepted if the
click does result in toggling the switch.

This leaves the pan gesture room to handle dragging the handle.

Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/2895
gtk/gtkswitch.c

index 99ac45f94142132fc7be316c66eaf5c239e87999..e720ac3030811d4a116f6f791ab18fe040344344 100644 (file)
@@ -205,8 +205,6 @@ gtk_switch_click_gesture_pressed (GtkGestureClick *gesture,
   if (!gtk_widget_compute_bounds (GTK_WIDGET (self), GTK_WIDGET (self), &switch_bounds))
     return;
 
-  gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
-
   /* If the press didn't happen in the draggable handle,
    * cancel the pan gesture right away
    */
@@ -228,7 +226,10 @@ gtk_switch_click_gesture_released (GtkGestureClick *gesture,
 
   if (gtk_widget_contains (GTK_WIDGET (self), x, y) &&
       gtk_gesture_handles_sequence (GTK_GESTURE (gesture), sequence))
-    gtk_switch_begin_toggle_animation (self);
+    {
+      gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
+      gtk_switch_begin_toggle_animation (self);
+    }
 }
 
 static void